import request from '@/utils/request'

/**
 * 流程执行监控API接口
 */

/**
 * 分页查询流程执行记录
 * @param {Object} params - 查询参数
 * @param {string} params.flowCode - 流程编码
 * @param {string} params.flowName - 流程名称
 * @param {number} params.status - 执行状态
 * @param {string} params.startTime - 开始时间
 * @param {string} params.endTime - 结束时间
 * @param {number} params.current - 页码
 * @param {number} params.size - 每页大小
 * @returns {Promise} 执行记录列表数据
 */
export const getExecutionPage = (params) => {
  return request({
    url: '/flow-executions/page',
    method: 'get',
    params
  })
}

/**
 * 同步执行流程
 * @param {Object} data - 执行数据
 * @param {string} data.flowCode - 流程编码
 * @param {Object} data.inputData - 输入参数
 * @returns {Promise} 执行结果
 */
export const executeFlowSync = (data) => {
  return request({
    url: '/flow-executions/execute/sync',
    method: 'post',
    data
  })
}

/**
 * 异步执行流程
 * @param {Object} data - 执行数据
 * @param {string} data.flowCode - 流程编码
 * @param {Object} data.inputData - 输入参数
 * @returns {Promise} 执行结果
 */
export const executeFlowAsync = (data) => {
  return request({
    url: '/flow-executions/execute/async',
    method: 'post',
    data
  })
}

/**
 * 根据ID获取流程执行详情
 * @param {number} id - 执行记录ID
 * @returns {Promise} 执行详情数据
 */
export const getExecutionById = (id) => {
  return request({
    url: `/flow-executions/${id}`,
    method: 'get'
  })
}

/**
 * 根据链路追踪ID获取执行记录
 * @param {string} traceId - 链路追踪ID
 * @returns {Promise} 执行记录数据
 */
export const getExecutionByTraceId = (traceId) => {
  return request({
    url: `/flow-executions/trace/${traceId}`,
    method: 'get'
  })
}

/**
 * 停止流程执行
 * @param {number} id - 执行记录ID
 * @returns {Promise} 操作结果
 */
export const stopExecution = (id) => {
  return request({
    url: `/flow-executions/${id}/stop`,
    method: 'post'
  })
}

/**
 * 重新执行流程
 * @param {number} id - 执行记录ID
 * @returns {Promise} 操作结果
 */
export const retryExecution = (id) => {
  return request({
    url: `/flow-executions/${id}/retry`,
    method: 'post'
  })
}

/**
 * 暂停流程执行
 * @param {number} id - 执行记录ID
 * @returns {Promise} 操作结果
 */
export const pauseExecution = (id) => {
  return request({
    url: `/flow-executions/${id}/pause`,
    method: 'post'
  })
}

/**
 * 恢复流程执行
 * @param {number} id - 执行记录ID
 * @returns {Promise} 操作结果
 */
export const resumeExecution = (id) => {
  return request({
    url: `/flow-executions/${id}/resume`,
    method: 'post'
  })
}

/**
 * 获取运行中的流程执行记录
 * @returns {Promise} 运行中的执行记录列表
 */
export const getRunningExecutions = () => {
  return request({
    url: '/flow-executions/running',
    method: 'get'
  })
}

/**
 * 获取流程执行状态
 * @param {number} id - 执行记录ID
 * @returns {Promise} 执行状态数据
 */
export const getExecutionStatus = (id) => {
  return request({
    url: `/flow-executions/${id}/status`,
    method: 'get'
  })
}

/**
 * 获取节点执行详情
 * @param {number} id - 执行记录ID
 * @returns {Promise} 节点执行详情数据
 */
export const getExecutionNodes = (id) => {
  return request({
    url: `/flow-executions/${id}/nodes`,
    method: 'get'
  })
}

/**
 * 批量停止流程执行
 * @param {Array<number>} ids - 执行记录ID列表
 * @returns {Promise} 操作结果
 */
export const batchStopExecutions = (ids) => {
  return request({
    url: '/flow-executions/batch-stop',
    method: 'post',
    data: { ids }
  })
}

/**
 * 获取流程输入数据
 * @param {number} id - 执行记录ID
 * @returns {Promise} 输入数据
 */
export const getExecutionInput = (id) => {
  return request({
    url: `/flow-executions/${id}/input`,
    method: 'get'
  })
}